package cn.rkylin.oms.aftersale.event.service;

import java.util.List;

import com.github.pagehelper.PageInfo;

import cn.rkylin.oms.aftersale.event.domain.AfterSaleEvent;
import cn.rkylin.oms.aftersale.event.vo.AfterSaleEventVO;

/**
 * 类名:IAfterSaleEventService <br/>
 * 作用: 售后事件服务层接口. <br/>
 * 创建原因: 售后事件服务层接口. <br/>
 * 创建时间: 2017年9月25日 下午1:40:55 <br/>
 *
 * @author zhanghao
 * @version v1.0
 */
public interface IAfterSaleEventService {

    /**
     * queryEventList:查询售后事件列表. <br/>
     * <p>
     * 根据查询条件查询售后事件，返回数据分页显示
     * 
     * @param page
     * @param rows
     * @param event
     * @return
     * @throws Exception
     */
    PageInfo<AfterSaleEventVO> queryEventList(int page, int rows, AfterSaleEventVO event) throws Exception;

    /**
     * findCounts：事件的各种count
     * 
     * @param param
     * @return
     * @throws Exception
     */
    public List<AfterSaleEventVO> findCounts(AfterSaleEventVO param) throws Exception;

    /**
     * queryEventById:根据事件id查询售后事件. <br/>
     * 
     * @param queryEventId
     * @return
     * @throws Exception
     */
    AfterSaleEventVO queryEventById(String queryEventId) throws Exception;

    /**
     * queryEventByCode:根据售后事件编号查询售后事件. <br/>
     * 
     * @param Code
     * @return
     * @throws Exception
     */
    AfterSaleEvent queryEventByCode(String Code) throws Exception;

    /**
     * queryEventByOrderId:按订单Id获取售后事件
     * 
     * @param orderId
     * @return
     * @throws Exception
     */
    public AfterSaleEventVO queryEventByOrderId(String orderId) throws Exception;

    /**
     * validateEventDealer:当前登录人是否UserId. <br/>
     * 
     * @param userId
     * @param eventId
     * @return
     * @throws Exception
     */
    boolean validateEventDealer(String userId, String eventId) throws Exception;

    /**
     * saveEvent:保存售后事件
     * 
     * @param eventVO
     * @return
     * @throws Exception
     */
    public String saveEvent(AfterSaleEventVO eventVO) throws Exception;

    /**
     * deleteAfterSaleEvent:根据事件ID删除事件. <br/>
     * 只有待处理状态的事件可以执行删除.<br/>
     *
     * @param eventIds
     * @return
     * @throws Exception
     * @author zhanghao
     */
    public int deleteAfterSaleEvent(String eventIds) throws Exception;

    /**
     * dealEvent:处理售后事件. <br/>
     * 售后事件为待处理的状态；.<br/>
     * 销售事件状态由待处理转变为处理中状态.<br/>
     * 当需要批量处理时，传入参数使用逗号分隔的事件ID.<br/>
     *
     * @param eventIds
     * @return
     * @throws Exception
     * @author zhanghao
     */
    public int dealEvent(String eventIds) throws Exception;

    /**
     * cancelDealEvent:取消售后事件处理. <br/>
     * 售后事件为处理中的状态；.<br/>
     * 销售事件状态由处理中转变为待处理状态.<br/>
     * 当需要批量处理时，传入参数使用逗号分隔的事件ID.<br/>
     * 只有处理人能取消售后事件处理.<br/>
     *
     * @param eventIds
     * @return
     * @throws Exception
     * @author zhanghao
     */
    public int cancelDealEvent(String eventIds) throws Exception;

    /**
     * CompleteEvent:完成售后事件. <br/>
     * 售后事件的状态为处理中，才能执行此操作.<br/>
     * 需要同时完成多条售后事件时，参数为逗号分隔的事件ID.<br/>
     *
     * @param eventId
     * @return
     * @throws Exception
     * @author zhanghao
     */
    public int completeEvent(String eventIds) throws Exception;

    /**
     * addAfterSaleEvent:新增售后事件. <br/>
     * 新增售后事件必须指定订单，如果没有订单信息不能生成售后事件.<br/>
     * 根据订单信息获取平台交易号和客户ID.<br/>
     * 售后日期应当晚于当前系统时间.<br/>
     * 新增售后事件的状态为待处理.<br/>
     *
     * @param AfterSaleEvent
     * @return
     * @throws Exception
     * @author zhanghao
     */
    int addAfterSaleEvent(String sysOrderId, AfterSaleEvent AfterSaleEvent) throws Exception;

    /**
     * updateAfterSaleEvent:更新售后事件. <br/>
     * 只有待处理的事件可以执行更新售后事件，处理中及处理完成的不能更新售后事件.<br/>
     * 售后原因类型、指定处理人、到期时间、以及备注信息；<br/>
     *
     * @param event
     * @return
     * @throws Exception
     * @author zhanghao
     */
    int updateAfterSaleEvent(AfterSaleEventVO event) throws Exception;

    /**
     * 获取系统订单对应售后事件列表 wangxing 2017-12-04 add
     * @param orderId
     * @return
     * @throws Exception
     */
    public List<AfterSaleEventVO> queryEventListByOrderId(String orderId) throws Exception;

}
